package com.cskaoyan.javase.array._4operation._3retrieve;

/**
 * 高级Java开发攻城狮,简称CURD工程师,增删改查(程序员最基本的操作)
 * c: create 新增
 * r: retrieve 检索
 * u: update 更新/改
 * d: delete 删除
 *
 * 数组中元素的检索,找到一个元素后,返回它的下标值
 *
 * @since 15:50
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 21, 312, 312, 3, 12, 312, 3, 12, 3, 124, 32, 4, 32, 42, 34, 1, 312, 43, 12};
        System.out.println("目标元素最后一次出现的下标是:" + getLastIndex(arr, 11));
        System.out.println("目标元素第一次出现的下标是:" + getFirstIndex(arr, 11));
    }

    /*
        获取的是目标元素最后一次在数组中出现的位置
     */
    public static int getLastIndex(int[] arr, int target) {
        // 预先定义一个int变量,用来装可能查找到的目标下标
        // 需要给出一个初始值,给一个不可能合法的下标,表示没查找到该元素
        int targetIndex = -1;
        // 遍历数组,逐一比对,需要使用for循环
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == target) {
                targetIndex = i;
            }
        }
        return targetIndex;
    }


    /*
        获取的是目标元素第一次在数组中出现的位置
     */
    public static int getFirstIndex(int[] arr, int target) {
        // 预先定义一个int变量,用来装可能查找到的目标下标
        // 需要给出一个初始值,给一个不可能合法的下标,表示没查找到该元素
        // int targetIndex = -1;
        // 遍历数组,逐一比对,需要使用for循环
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == target) {
                // targetIndex = i;
                // 找到了,不需要继续查找了,直接结束循环
                return i;
            }
        }
        return -1;
    }
}
